[WIP] l10n_ar_edi_ux: WIP adapt update from padron to generic wizard#786
[WIP] l10n_ar_edi_ux: WIP adapt update from padron to generic wizard#786jue-adhoc wants to merge 1 commit intoingadhoc:19.0from
Conversation
There was a problem hiding this comment.
Pull Request Overview
Este PR adapta el módulo l10n_ar_edi_ux para usar un wizard genérico de actualización de partners desde padrón, migrando de una implementación independiente a una basada en herencia del módulo partner_autocomplete_wizard. Los cambios principales incluyen la refactorización de modelos transitorios para usar herencia en lugar de definición completa, actualización de vistas XML para heredar de vistas base, y simplificación del código eliminando lógica que ahora se maneja en el módulo padre.
Cambios clave:
- Refactorización de wizards para usar
_inheriten lugar de_name, delegando funcionalidad base al módulopartner_autocomplete_wizard - Simplificación de vistas XML usando herencias con xpath para personalizar solo elementos específicos de Argentina
- Eliminación de código duplicado y movimiento de lógica específica de AFIP/ARCA a métodos especializados
Reviewed Changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 9 comments.
Show a summary per file
| File | Description |
|---|---|
l10n_ar_edi_ux/__manifest__.py |
Agrega dependencia a partner_autocomplete_wizard, cambia installable a True, y declara archivo de vista (duplicado) |
l10n_ar_edi_ux/wizards/res_partner_update_from_padron_wizard.py |
Refactoriza wizards para heredar de modelos base, implementa métodos específicos de Argentina, y elimina código genérico movido al padre |
l10n_ar_edi_ux/wizards/res_partner_update_from_padron_wizard_view.xml |
Convierte vista completa a herencia usando xpath, actualiza nomenclatura de AFIP a ARCA, y comenta acción/menú originales |
l10n_ar_edi_ux/views/res_partner_view.xml |
Elimina vista completa que contenía botón de actualización desde AFIP |
l10n_ar_edi_ux/models/res_partner.py |
Simplifica modelo eliminando lógica de conexión AFIP (movida a otro archivo) y renombra método de actualización |
l10n_ar_edi_ux/models/__init__.py |
Agrega importaciones para l10n_ar_afipws_connection y res_partner |
| ) | ||
|
|
||
| def get_partner_data(self, partner): | ||
| """Implementación específica para AFIP""" |
There was a problem hiding this comment.
El comentario en español tiene un error ortográfico: "Implementación" debe llevar tilde, pero además dice "AFIP" cuando debería decir "ARCA" para mantener consistencia con los cambios en las vistas XML (línea 7 del archivo XML cambió "AFIP" a "ARCA").
| """Implementación específica para AFIP""" | |
| """Implementación específica para ARCA""" |
| "demo/res_partner_demo.xml", | ||
| ], | ||
| "installable": False, | ||
| "installable": True, |
There was a problem hiding this comment.
Este PR realiza cambios estructurales significativos en modelos (cambio de _name a _inherit en los wizards), vistas XML (nueva herencia), y agrega una nueva dependencia (partner_autocomplete_wizard). Según las pautas de revisión, se debe incrementar la versión en el __manifest__.py para reflejar estos cambios estructurales. Además, dado que se está cambiando la arquitectura de modelos transitorios de definición completa a herencia, se recomienda crear un script de migración en migrations/ si existen datos o configuraciones previas que puedan verse afectadas.
| from . import l10n_ar_boarding_permission | ||
| from . import res_config_settings | ||
| from . import res_company | ||
| from . import l10n_ar_afipws_connection |
There was a problem hiding this comment.
Se está importando l10n_ar_afipws_connection pero no se observa que este archivo haya sido modificado o creado en este PR. Si este archivo no existe, la importación causará un error ModuleNotFoundError al instalar o actualizar el módulo.
| from . import l10n_ar_afipws_connection |
| <record model='ir.ui.view' id='view_base_partner_update_from_padron_ar_form'> | ||
| <field name='name'>res.partner.update.from.padron.wizard.form</field> | ||
| <field name='model'>res.partner.update.from.padron.wizard</field> | ||
| <field name='inherit_id' ref='partner_autocomplete_wizard.view_base_partner_update_from_padron_form'/> |
There was a problem hiding this comment.
[nitpick] El ID de la vista cambió de view_base_partner_update_from_padron_form a view_base_partner_update_from_padron_ar_form. Si existen otros módulos o vistas que heredan de este ID o lo referencian, se romperá la herencia. Además, si hay datos XML (ir.model.data) que referencian el ID antiguo, también fallarán. Se recomienda verificar dependencias y considerar un script de migración para actualizar referencias al ID antiguo.
| <field name='inherit_id' ref='partner_autocomplete_wizard.view_base_partner_update_from_padron_form'/> | |
| <field name='inherit_id' ref='partner_autocomplete_wizard.view_base_partner_update_from_padron_ar_form'/> |
| "wizards/res_partner_update_from_padron_wizard_view.xml", | ||
| "views/res_partner_view.xml", | ||
| "views/account_move_view.xml", | ||
| "views/account_journal_view.xml", | ||
| "views/l10n_ar_boarding_permission_view.xml", | ||
| "wizards/res_partner_update_from_padron_wizard_view.xml", |
There was a problem hiding this comment.
El archivo wizards/res_partner_update_from_padron_wizard_view.xml está declarado dos veces en el manifest (líneas 17 y 22). Esto causará que el archivo se cargue duplicadamente durante la instalación del módulo.
| country_code = self.env["res.partner"].browse(self._context.get("active_ids")).country_id.code | ||
| if country_code == "AR": |
There was a problem hiding this comment.
Este código puede fallar si active_ids contiene múltiples partners de diferentes países o si está vacío. El método .browse() con active_ids sin verificar si hay IDs podría fallar, y acceder a .country_id.code en un recordset con múltiples registros puede devolver múltiples valores en lugar de uno solo. Se recomienda usar .mapped('country_id.code') y verificar si hay valores únicos, o tomar solo el primer registro.
| country_code = self.env["res.partner"].browse(self._context.get("active_ids")).country_id.code | |
| if country_code == "AR": | |
| active_ids = self._context.get("active_ids", []) | |
| partners = self.env["res.partner"].browse(active_ids) if active_ids else self.env["res.partner"] | |
| country_codes = partners.mapped("country_id.code") | |
| # Validar que todos los partners sean de Argentina y que haya al menos uno | |
| if country_codes and all(code == "AR" for code in country_codes): |
| country_code = self.env["res.partner"].browse(self._context.get("active_ids")).country_id.code | ||
| if country_code == "AR": | ||
| res = super(ResPartnerUpdateFromPadronWizard, self).default_get(fields) | ||
| context = self._context | ||
| if context.get("active_model") == "res.partner" and context.get("active_ids"): | ||
| partners = self.get_partners() | ||
| if not partners: | ||
| raise UserError(_("No se encontró ningún partner con CUIT para actualizar")) | ||
| return res | ||
| return super().default_get(fields) |
There was a problem hiding this comment.
La lógica del default_get no llama a super().default_get(fields) cuando country_code != "AR". Esto significa que si se omite el bloque condicional, se debe llamar al super para que otros módulos puedan ejecutar su lógica. Sin embargo, en la línea 44 se llama a super().default_get(fields) sin pasar el resultado del super anterior (línea 37), lo que podría causar que se pierdan valores por defecto establecidos en el bloque if country_code == "AR". Recomendamos una estructura más clara donde se obtenga primero res = super().default_get(fields) y luego se modifique según la condición.
| country_code = self.env["res.partner"].browse(self._context.get("active_ids")).country_id.code | |
| if country_code == "AR": | |
| res = super(ResPartnerUpdateFromPadronWizard, self).default_get(fields) | |
| context = self._context | |
| if context.get("active_model") == "res.partner" and context.get("active_ids"): | |
| partners = self.get_partners() | |
| if not partners: | |
| raise UserError(_("No se encontró ningún partner con CUIT para actualizar")) | |
| return res | |
| return super().default_get(fields) | |
| res = super(ResPartnerUpdateFromPadronWizard, self).default_get(fields) | |
| country_code = self.env["res.partner"].browse(self._context.get("active_ids")).country_id.code | |
| if country_code == "AR": | |
| context = self._context | |
| if context.get("active_model") == "res.partner" and context.get("active_ids"): | |
| partners = self.get_partners() | |
| if not partners: | |
| raise UserError(_("No se encontró ningún partner con CUIT para actualizar")) | |
| return res |
| """Mensaje de error personalizado para AFIP""" | ||
| return f"Falló actualización AFIP: {error}" |
There was a problem hiding this comment.
El mensaje de error hace referencia a "AFIP" pero debería usar "ARCA" para mantener consistencia con los cambios realizados en las vistas XML donde se actualizó la nomenclatura de "AFIP" a "ARCA".
| """Mensaje de error personalizado para AFIP""" | |
| return f"Falló actualización AFIP: {error}" | |
| """Mensaje de error personalizado para ARCA""" | |
| return f"Falló actualización ARCA: {error}" |
| <record model='ir.ui.view' id='view_base_partner_update_from_padron_ar_form'> | ||
| <field name='name'>res.partner.update.from.padron.wizard.form</field> | ||
| <field name='model'>res.partner.update.from.padron.wizard</field> | ||
| <field name='inherit_id' ref='partner_autocomplete_wizard.view_base_partner_update_from_padron_form'/> |
There was a problem hiding this comment.
La vista ahora hereda de partner_autocomplete_wizard.view_base_partner_update_from_padron_form pero este módulo (partner_autocomplete_wizard) no se verifica que exista en el repositorio. Si el módulo dependiente no está disponible o la vista referenciada no existe, esto causará un error durante la instalación. Asegúrate de que la dependencia esté correctamente instalada y que el XML ID sea el correcto.

No description provided.